//怪兽构造函数
(function (window, undefined) {
  // 变量存储定位方式
  var ps = 'absolute';
  //怪兽构造函数
  function Enemy(obj) {
    //判断用户输入参数
    obj = obj instanceof Object ? obj : {};
    //怪兽宽高、速度、行数（速度和行数对应难度）、舞台边距、怪兽位置数组、怪兽节点数组，默认怪兽运动方向
    this.width = obj.width || 50;
    this.height = obj.height || 50;
    this.speed = obj.speed || 0.1;
    this.row = obj.row || 1;
    this.padding = obj.padding || 30;
    this.items = [];
    this.eles = [];
    this.direction = 'right';
  }
  //怪兽原型
  Enemy.prototype = {
    //指向构造函数
    constructor: Enemy,
    //怪兽初始化，根据行数确定怪兽运行速度，确定渲染多少只怪兽（每行7只）
    inIt: function () {
      //根据行数设置速度（行数越大，说明难度越高，速度也越高）
      this.speed = this.row / 10;
      //生成怪兽定位，添加到怪兽定位数组中
      for (let j = 0; j < this.row; j++) {
        for (let i = 0; i < 7; i++) {
          this.items.push({
            x: i,
            y: j
          });
        }
      }
    },
    // 怪兽渲染方法
    render: function (father) {
      //比那里怪兽参数，有多少个参数就有多少只怪兽
      for (let i = 0, l = this.items.length; i < l; i++) {
        //创建元素节点
        var me = document.createElement('div');
        //修改怪兽样式
        me.style.position = ps;
        //设置怪兽类名，对应css设置背景图片
        me.className = 'enemy';
        me.style.width = this.width + 'px';
        me.style.height = this.height + 'px';
        me.style.top = this.items[i].y * this.height + this.padding + 'px';
        me.style.left = this.items[i].x * this.width + this.padding + 'px';
        //怪兽背景
        // me.style.background = ' #fff url(../img/enemy.png) no-repeat 0 0';
        // me.style.backgroundSize = this.width + 'px auto';
        //添加到舞台上
        father.appendChild(me);
        //把生成的怪兽添加到数组中便于日后操作
        this.eles.push(me);
      }
    },
    //怪兽位置更新方法
    upData: function (father) {
      //判断一行能容纳多少只怪兽，怪兽移动不能超过这个，超过换行
      var maxX = (father.clientWidth - this.padding * 2) / this.width - 1;
      //判断怪兽移动方向，再根据方向判断是否到达舞台边缘
      //到达舞台边缘行数加1并且修改运动方向相反，否则按照速度继续运动
      if (this.direction === 'right') {
        if (this.items[this.items.length - 1].x >= maxX) {
          for (let i = 0, l = this.items.length; i < l; i++) {
            this.items[i].y += 1;
          }
          this.direction = 'left'
        } else {
          for (let i = 0, l = this.items.length; i < l; i++) {
            this.items[i].x += this.speed;
          }
        }
      } else if (this.direction === 'left') {
        if (this.items[0].x <= 0) {
          for (let i = 0, l = this.items.length; i < l; i++) {
            this.items[i].y += 1;
          }
          this.direction = 'right'
        } else {
          for (let i = 0, l = this.items.length; i < l; i++) {
            this.items[i].x -= this.speed;
          }
        }
      }
    },
    //怪兽删除方法
    remove: function (father) {
      //遍历所有怪兽节点，从舞台删除
      for (let i = 0, l = this.eles.length; i < l; i++) {
        father.removeChild(this.eles[i]);
      }
      //清空怪兽节点，方便下次渲染
      this.eles = [];
    },
    //怪兽死亡方法，参数I代表要删除怪兽的下标
    die: function (i) {
      this.items.splice(i, 1);
    }
  }
  //把怪兽添加到window上
  window.Enemy = Enemy;
})(window, undefined)